﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using kk.messages.contracts.ViewModel;
using kk.messages.contracts.DataModel;


namespace kk.belegungsplanansicht
{
    public partial class SitzplatzAnsicht : UserControl
    {
        private Platzbelegung _platz;
        private bool _isSelected;

        private Timer _myTimer = new Timer();
        
        public SitzplatzAnsicht()
        {
            InitializeComponent();

            if (this.DesignMode)
                return;

            _myTimer.Interval = 500;
            _myTimer.Start();
            _myTimer.Tick += _myTimer_Tick;
        }

        void _myTimer_Tick(object sender, EventArgs e)
        {
            if ( this._platz.IstBelegt )
                return;

            if ( this.IsSelected )
            {
                if ( Environment.TickCount % 1000 > 500)
                    this.checkBoxMarkiert.BackColor = GetColorFromPriceKat();
                else
                    this.checkBoxMarkiert.BackColor = Color.LightGray;
            }
            else
            {
                this.checkBoxMarkiert.BackColor = GetColorFromPriceKat();                
            }
        }

        public Platzbelegung Platz
        {
            get { return _platz; }
            set
            {
                _platz = value;
                DrawThis();
            }
        }

        public bool IsSelected
        {
            get { return _isSelected; }
            set { _isSelected = value; }
        }


        void DrawThis()
        {
            if (_platz == null)
                return;

            if (_platz.IstBelegt)
            {
                this.Enabled= false;
                this.checkBoxMarkiert.BackColor = Color.LightGray;
                this.labelPreisKat.Visible = false;
            }
            else
            {
                this.Enabled  = true;
                this.checkBoxMarkiert.BackColor = GetColorFromPriceKat();
                this.labelPreisKat.Visible = true;
              
            }

            this.labelPreisKat.Text = _platz.Preiskategorie.KategorieSchlüssel.ToString();
            this.labelPlatzNr.Text  = _platz.Position.Reihe + " " + _platz.Position.Platznummer;
        }

        private Color GetColorFromPriceKat()
        {
            switch( _platz.Preiskategorie.KategorieSchlüssel )
            {
                case 'A':
                    return Color.Black;

                case 'B':
                    return Color.Blue;

                case 'C':
                    return Color.Red;

                case 'D':
                    return Color.Green;

                default:
                    return Color.Purple;
            }
        }

        private void SitzplatzAnsicht_Click(object sender, EventArgs e)
        {
            if (_platz.IstBelegt)
                return;

            this.IsSelected = ! this.IsSelected;

            if (this.IsSelected)
            {
                this.checkBoxMarkiert.BackColor = Color.LightGray;
                this.checkBoxMarkiert.CheckState = CheckState.Checked;
            }
            else
                this.checkBoxMarkiert.CheckState = CheckState.Unchecked;

        }

        private void checkBoxMarkiert_Resize(object sender, EventArgs e)
        {
            if (Size.Height > 50 )
                labelPlatzNr.Visible = true;
            else
                labelPlatzNr.Visible = false;
        }

    }
}
